﻿using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MessageCenter
{
    public static MessageCenter _instance = null;
    public static MessageCenter instance
    {
        get
        {
            if (_instance == null)
                _instance = new MessageCenter();
            return _instance;
        }
    }
    public Dictionary<MsgType, List<MessageEvent>> msgDic = new Dictionary<MsgType, List<MessageEvent>>();

    public void AddEvtListener(MsgType msgType, MessageEvent msgEvt)
    {
        List<MessageEvent> list = null;
        if (msgDic.ContainsKey(msgType))
            list = msgDic[msgType];
        else
        {
            list = new List<MessageEvent>();
            msgDic.Add(msgType, list);
        }
        if (!list.Contains(msgEvt))
            list.Add(msgEvt);
    }

    public void RemoveEvtListener(MsgType msgType, MessageEvent msgEvt)
    {
        if (msgDic.ContainsKey(msgType))
        {
            List<MessageEvent> list = msgDic[msgType];
            if (list.Contains(msgEvt))
            {
                list.Remove(msgEvt);
            }
            if (list.Count <= 0)
            {
                msgDic.Remove(msgType);
            }
        }
    }

    public void Dispatcher(Message msg)
    {
        if (!msgDic.ContainsKey(msg.msgType))
            return;
        List<MessageEvent> list = msgDic[msg.msgType];
        for (int i = 0; i < list.Count; i++)
        {
            list[i]?.Invoke(msg);
        }
    }
}